import { ViewChild, OnInit } from '@angular/core';
import { FormControl, FormGroup } from '@angular/forms';
export function customeFormValidate(valForm: FormGroup) {
  return (c: FormControl) => {
    const err = {
      rangeError: {
        given: c.value,
      }
    };
    return valForm.valid ? null : err;
  };
}
/**
 ngOnChanges                当被绑定的输入属性的值发生变化时调用，首次调用一定会发生在 ngOnInit之前。
 ngOnInit                   在第一轮 ngOnChanges 完成之后调用。 ( 译注：也就是说当每个输入属性的值都被触发了一次 ngOnChanges 之后才会调用 ngOnInit ，
                                                                         此时所有输入属性都已经有了正确的初始绑定值 )
 ngDoCheck                  在每个 Angular 变更检测周期中调用。
 ngAfterContentInit         当把内容投影进组件之后调用。
 ngAfterContentChecked      每次完成被投影组件内容的变更检测之后调用。
 ngAfterViewInit            初始化完组件视图及其子视图之后调用。
 ngAfterViewChecked         每次做完组件视图和子视图的变更检测之后调用。
 ngOnDestroy                当 Angular每次销毁指令 / 组件之前调用。
 **/
export class CommonComponent implements OnInit {
  @ViewChild('valForm') valForm: FormGroup;
  public data: any;
  onchange: any = () => { };
  validateFn: any = () => { };

  constructor() { }
  ngOnInit() {
    if (this.valForm) {
      this.valForm.statusChanges.subscribe(status => {
        this.onchange(this.data);
      });
      this.validateFn = customeFormValidate(this.valForm);
    }
  }
  writeValue(value) {
    if (value) {
      this.data = value;
    }
  }

  registerOnChange(fn) {
    this.onchange = fn;
  }

  registerOnTouched() { }

  validate(c: FormControl) {
    return this.validateFn(c);
  }

}
